package ru.arriah.servicedesk.web.commonaction;

import java.io.IOException;
import java.util.Collection;

import javax.naming.NamingException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import ru.arriah.common.web.action.ActionMapping;
import ru.arriah.common.web.action.DumbAction;
import ru.arriah.servicedesk.bean.RequestBean;
import ru.arriah.servicedesk.bean.TaskBean;
import ru.arriah.servicedesk.ejb.RequestManagerLocalHome;
import ru.arriah.servicedesk.ejb.RequestManagerLocalObject;
import ru.arriah.servicedesk.help.Utils;
import ru.arriah.servicedesk.web.commonaction.exception.InternalException;
import ru.arriah.servicedesk.web.commonaction.exception.PrivilegesException;

public class SetRequestActiveAction extends DumbAction {
  protected RequestManagerLocalHome requestManagerLocalHome;  
  
  public SetRequestActiveAction () throws NamingException {
    super();
    requestManagerLocalHome = 
       Utils.getRequestManagerHomeInterface();
  }

  
  public String execute(
    ActionMapping actionMapping,
    HttpServletRequest request, 
    HttpServletResponse response
   ) throws IOException, ServletException {
    try {     
     
     RequestManagerLocalObject requestManager = 
       requestManagerLocalHome.create();
               
     int requestId = idVal(request.getParameter("request_id"));
     int userId = getUserId(request);
     
     RequestBean requestBean = requestManager.selectRequest(requestId);
     
     if (!Utils.getUserRole(request).equals("chief"))
     if (requestBean.getLeadExecutorId() == userId) {
        request.setAttribute("status", "request_lead_executor");
     } else
        throw new PrivilegesException("Access denied, request id: " + requestId);
     
     
     if (requestBean.getStatusId() == 4 || requestBean.getStatusId() == 6)
       addErrorMessage(
          request,          
          config.getProperty("ERROR.STATUS_NOT_CHANGED")
       );     
     else if (requestManager.setRequestStatus(requestId, 4, userId)) {
         requestManager.activateTasks(requestId, userId);        
         addInfMessage(
            request,
            config.getProperty("INF.REQUEST_ACTIVE")
         );                                         
     } else
          
         addErrorMessage(
            request,
            config.getProperty("ERROR.STATUS_NOT_CHANGED")
         );           
     
     
     requestBean = requestManager.selectRequestDetails(requestId);
     
     Collection<TaskBean> tasksList = 
        requestManager.selectTasksByRequest(
           requestId,
           "executor",
           "ASC"
        );
          
     
     request.setAttribute("tasksList", tasksList);
     request.setAttribute("requestBean", requestBean);
     
     requestManager.remove();   
     return actionMapping.getSuccessTarget();
   } catch (Exception e) {
      handleException(e, "execute");
      throw new InternalException("ErrorMessage.internal");
   }
 }
}